home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1998 July / EnigmA AMIGA RUN 29 (1998)(G.R. Edizioni)(IT)[!][issue 1998-07 & 08].iso / earcd / phase5 / ppcrelease / tools / ppcsignaltask.c < prev    next >
C/C++ Source or Header  |  1998-02-21  |  3KB  |  121 lines

  1. #include <exec/types.h>
  2. #include <exec/libraries.h>
  3. #include <proto/exec.h>
  4. #include <proto/dos.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7. #include <PowerUP/pragmas/ppc_pragmas.h>
  8. #include <PowerUP/clib/ppc_protos.h>
  9. #include "PPCSignalTask_VERSION.h"
  10.  
  11. UBYTE vers[] = VERSTAG;
  12.  
  13. extern struct ExecBase    *SysBase;
  14.  
  15. char    *ArgumentString = "ID/K,Name,Signal/N,SignalMask/K";
  16.  
  17. #define    INDEX_ID        0
  18. #define    INDEX_NAME        1
  19. #define    INDEX_SIGNAL        2
  20. #define    INDEX_SIGNALMASK    3
  21. #define    INDEX_COUNT        4
  22. LONG    *MyArgs[INDEX_COUNT];
  23.  
  24. void    main(void)
  25. {
  26. struct Library    *PPCLibBase;
  27. void        *MyTask=NULL;
  28. struct    RDArgs    *rdargs;
  29. ULONG        SignalMask;
  30. char        *String;
  31.  
  32.   if (!(rdargs=ReadArgs(ArgumentString,(LONG*) &MyArgs[0],NULL)))
  33.   {
  34.     Printf("Commandline Error\n");
  35.     return;
  36.   }
  37.   else
  38.   {
  39.     if (PPCLibBase=OpenLibrary("ppc.library",0))
  40.     {
  41.       if (String=(char*)MyArgs[INDEX_ID])
  42.       {
  43.         if (String[0] == '$')
  44.         {
  45.           String++;
  46.         }
  47.         else
  48.         if ((String[0] == '0') &&
  49.             (String[1] == 'x'))
  50.         {
  51.           String+=2;
  52.         }
  53.         if (stch_l(String,(LONG*) &MyTask) == 0)
  54.         {
  55.           Printf("Can`t parse the ID parameter\n");
  56.           FreeArgs(rdargs);
  57.           return;
  58.         }
  59.         MyTask=PPCFindTaskObject(MyTask);
  60.       }
  61.       else
  62.       if (MyArgs[INDEX_NAME])
  63.       {
  64.         MyTask=PPCFindTask((char*) MyArgs[INDEX_NAME]);
  65.       }
  66.       
  67.       if (MyTask)
  68.       {
  69.         if (MyArgs[INDEX_SIGNAL])
  70.         {
  71.           SignalMask    =    1 << *MyArgs[INDEX_SIGNAL];
  72.         }
  73.         else if (String=(char*)MyArgs[INDEX_SIGNALMASK])
  74.         {
  75.           if (String[0] == '$')
  76.           {
  77.             String++;
  78.           }
  79.           else
  80.           if ((String[0] == '0') &&
  81.               (String[1] == 'x'))
  82.           {
  83.             String+=2;
  84.           }
  85.           if (stch_l(String,(LONG*) &SignalMask) == 0)
  86.           {
  87.             Printf("Can`t parse the StringMask parameter\n");
  88.             FreeArgs(rdargs);
  89.             return;
  90.           }
  91.         }
  92.         else
  93.         {
  94.           Printf("Missing signal parameter\n");
  95.           FreeArgs(rdargs);
  96.           return;
  97.         }
  98.  
  99.         Printf("Send SIGNALMASK 0x%08lx to PPC Task 0x%08lx\n",
  100.                SignalMask,
  101.                MyTask);
  102.  
  103.  
  104.         PPCSignalTask(MyTask,
  105.                       SignalMask);
  106.  
  107.         Printf("Signal done\n");
  108.       }
  109.       else
  110.       {
  111.         Printf("No PPC Task found\n");
  112.       }
  113.     }
  114.     else
  115.     {
  116.       Printf("No ppc.library found\n");
  117.     }
  118.     FreeArgs(rdargs);
  119.   }
  120. }
  121.